/*  
  -- The Lime II Project -- 

  A tuplespaces-based middleware for coordinating agents and mobile hosts.
  Copyright (C) 2005.
  Gian Pietro Picco, Amy L. Murphy, Lorenzo Bellini.

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  Lesser General Public License for more details.

  You should have received this copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
 */

package lime2;

import lights.interfaces.*;

/**
 * An operation dealing with tuples within a local tuplespace.
 * 
 * @author Gian Pietro Picco
 * @author Amy Murphy
 * @author Lorenzo Bellini
 */

public class TupleOp extends LocalOp {

	private static final long serialVersionUID = 8372037247938936626L;
	/**
	 * Encapsulated tuples.
	 */
	ITuple[] tuples;
	
	/*
	 * The multicast targets 
	 */
	Location[] targets = null;

	/**
	 * Constructor method.
	 * 
	 * @param type
	 *            the code for this operation
	 * @param tuples
	 *            the carried tuples (often it is just one tuple used as a
	 *            template)
	 * @param result
	 *            the result to carry back
	 */
	public TupleOp(byte type, ITuple[] tuples, Result result) {
		super(type, result);
		this.tuples = tuples;
	}

	/**
	 * Constructor method.
	 * 
	 * @param type
	 *            the code for this operation
	 * @param tuples
	 *            the carried tuples (often it is just one tuple used as a
	 *            template)
	 * @param wheretos
	 * 			  The array of multicast targets     
	 * @param result
	 *            the result to carry back
	 */
	public TupleOp(byte type, ITuple[] tuples, Location[] wheretos, Result result) {
		super(type, result);
		this.tuples = tuples;
		this.targets = wheretos;
	}

	/**
	 * toString method.
	 * 
	 * @return textual representation
	 */
	public String toString() {
		return "TupleOp (" + Translator.translateType(type) + ")";
	}

}
